package com.assistant.command.impl;

import com.assistant.ai.NLUModule;
import com.assistant.ai.TTSModule;
import com.assistant.command.Command;
import com.assistant.core.CommandData;
import com.assistant.core.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author Anyang
 * @version 1.0.0
 * @date 2025/10/25 05:10:04
 * @description 知识问答
 */
public class AnswerQuestionCommand implements Command {
    private static final Logger logger = LoggerFactory.getLogger(AnswerQuestionCommand.class);

    private final NLUModule nluModule;
    private final TTSModule ttsModule; // 【新增】持有 TTSModule 实例

    // 【修改】构造函数需要 NLUModule 和 TTSModule
    public AnswerQuestionCommand(NLUModule nluModule, TTSModule ttsModule) {
        this.nluModule = nluModule;
        this.ttsModule = ttsModule;
    }

    @Override
    public boolean supports(String action) {
        return "answer_question".equals(action.toLowerCase());
    }

    @Override
    public String execute(CommandData data) {
        String prompt = data.getPrompt();
        if (prompt.isEmpty()) {
            return "对不起，听不懂呢。";
        }

        logger.info("执行指令：知识问答 -> Prompt: {}", prompt);

        // 如果 API 配置无效或启用 Mock 模式
        if (!Config.isConfigValid() || Config.ENABLE_MOCK) {
            logger.warn("【问答】API 配置无效或启用 Mock 模式，使用 Mock 文本。");
            return "【Mock回答】您的问题是：" + prompt + "。HTTP 是一种超文本传输协议。";
        }

        // 【核心修改】
        // 1. 启动一个新线程来处理流式问答，避免阻塞主线程
        //    (否则，主线程会卡在 NLUModule 的 send 请求上，无法返回下面的提示音)
        new Thread(() -> {
            nluModule.generateTextStream(prompt, ttsModule);
        }, "Q&A-Stream-Thread").start();

        // 2. 【核心】立即返回一个反馈给用户，告诉他“我正在处理”
        //    这个文本会被 MainApplication 立即播报
        return "好的，我查一下...";
    }
}